/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Reportes;

import CONTROLES.Conexion;
import CONTROLES.ControlCuenta;
import CONTROLES.ControlRecibo;
import CONTROLES.ControlSucursal;
import CONTROLES.ControlTipoCambio;
import CONTROLES.ControlUsuario;
import FACTURAS.Dosificacion;
import FACTURAS.Factura;
import INTERFAZ.Bienvenida;
import MODELOS.Cliente;
import MODELOS.Cuenta;
import MODELOS.PlanInversion;
import MODELOS.Recibo;
import MODELOS.Sucursal;
import MODELOS.TipoCambio;
import UTILITARIOS.Fecha;
import UTILITARIOS.Herramienta;
import UTILITARIOS.Hora;
import UTILITARIOS.NumerosLetras;
import java.net.URL;
import java.sql.Connection;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperPrintManager;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;




/**
 *
 * @author Marco Antonio
 */
public class Reporte {

    Connection conn = null;

    public Reporte()
    {       
        conn = Conexion.conection;
    }



    public void ejecutarReporte(int id)
    {
        URL in = null;
        in = getClass().getResource("/Reportes/reporteContrato.jasper");

        if(in == null){
            System.out.println("no se encuentra el archivo el archivo del maestro");
            System.exit(2);
        }
        JasperReport master = null;
        try {
            
            master = (JasperReport)JRLoader.loadObject(in);
            Cuenta cuenta = new ControlCuenta().getCuenta(id);
            Calendar c = Calendar.getInstance();
            c.setTime(cuenta.getFechaApertura());

            String dia = Integer.toString(c.get(Calendar.DATE));
            String mes = new Fecha().nombreMes(Integer.toString(c.get(Calendar.MONTH)+1));
            String anio = Integer.toString(c.get(Calendar.YEAR)); 
            System.out.println("fecha... "+dia+"/"+mes+"/"+anio);
            
            Map parametro = new HashMap();
            parametro.put("idCuenta", id);
            parametro.put("dia", dia);
            parametro.put("mes", mes);
            parametro.put("anio", anio);

            
            //JasperReport master = JasperCompileManager.compileReport(archivo);
            //este es el parametro , se pueden agregar mas
            //basta con poner  mas parametro.put
            //Reporte diseñado y compilado con IReport


            JasperPrint jasperPrint = JasperFillManager.fillReport(master, parametro,conn);
            
           /* JasperViewer jviewer= new JasperViewer(jasperPrint,false);
            jviewer.setTitle("Marco: Reporte");
            jviewer.setVisible(true);
*/
            JasperPrintManager.printReport(jasperPrint, true);
            

        } catch (Exception e) {
            System.out.println("Mensaje de error:"+e.getLocalizedMessage() );
        }
    }

     public void ejecutarReporteVacio(int id)
    {

        URL in = null;
        in = getClass().getResource("/Reportes/reporteContratoVacio.jasper");

        if(in == null){
            System.out.println("no se encuentra el archivo maestro reporteContratoVacio");
            System.exit(2);
        }
        JasperReport master = null;
        try {
            master = (JasperReport)JRLoader.loadObject(in);
            Cuenta cuenta = new ControlCuenta().getCuenta(id);
            Calendar c = Calendar.getInstance();
            c.setTime(cuenta.getFechaApertura());


            String dia = Integer.toString(c.get(Calendar.DATE));
            String mes = new Fecha().nombreMes(Integer.toString(c.get(Calendar.MONTH)+1));
            String anio = Integer.toString(c.get(Calendar.YEAR));
            System.out.println("fecha... "+dia+"/"+mes+"/"+anio);

            Map parametro = new HashMap();
            parametro.put("idCuenta", id);
            parametro.put("dia", dia);
            parametro.put("mes", mes);
            parametro.put("anio", anio);

            master = (JasperReport)JRLoader.loadObject(in);            

            JasperPrint jasperPrint = JasperFillManager.fillReport(master, parametro,conn);

//            JasperViewer visor=new JasperViewer(jasperPrint,false);
//            visor.setTitle("Geniz Reportes - GSF");
//            visor.setVisible(true);
            JasperPrintManager.printReport(jasperPrint, true);
            
        } catch (Exception e) {
            System.out.println("Mensaje de error reporteContratoVacio:"+e.getMessage() );
        }
    }


    public void ejecutarFactura(Factura f)
    {

        URL in = null;
        in = getClass().getResource("/Reportes/facturaReporte.jasper");
        if(in == null){
            System.out.println("no se encuentra el archivo el archivo maestro de factura");
            System.exit(2);
        }
        JasperReport master = null;
        try {
            master = (JasperReport)JRLoader.loadObject(in);
            int bolivianos = (int) f.getMonto().doubleValue();
            double centavos = (f.getMonto()- bolivianos)*100;
            System.out.println("Centavos = "+centavos);
            int cen = (int) centavos;
            String cent = cen+"/100";
            String letras = new NumerosLetras().NumerosALetras(bolivianos);

            Sucursal s = new ControlSucursal().obtenerSucursal(f.getIdSucursal());
            Dosificacion d = f.getDosificacion();

            Map parametro = new HashMap();
            parametro.put("numFactura", f.getNumFactura());            
            parametro.put("numAutorizacion", d.getNumAutorizacion());            
            parametro.put("ubiSucursal", s.getUbicacionSuc()+"-"+s.getDpto()+"-BOLIVIA");
            parametro.put("nitCliente", f.getNitCliente());
            parametro.put("cliente", f.getCliente());            
            parametro.put("fecha", f.getFecha());
            parametro.put("detalle", f.getDetalle());
            parametro.put("total", Herramienta.redondearDoubleString(f.getMonto()));
            parametro.put("letras", letras+" "+cent);
            parametro.put("codigoControl", f.getCodigoControl());
            parametro.put("fechaEmision", d.getFechaLimite());

            JasperPrint jasperPrint = JasperFillManager.fillReport(master, parametro,conn);

            JasperPrintManager.printReport(jasperPrint, true);

        } catch (Exception e) {
            System.out.println("Mensaje de error Ejecutando factura:"+e.getCause() );
        }
    }

    public void ejecutarReciboInt(int id) 
    {

        URL in = null;
        in = this.getClass().getResource("/Reportes/reciboInteres.jasper");

        if(in == null){
            System.out.println("no se encuentra el archivo el archivo del maestro");
            System.exit(2);
        }
        JasperReport master = null;
        try {
            master = (JasperReport)JRLoader.loadObject(in);
            ControlRecibo cr = new ControlRecibo();
            Recibo r = cr.getRecibo(id);
            String letras = new NumerosLetras().NumerosALetras((int)r.getMonto());

            int bolivianos = (int) r.getMonto();
            double centavos = (r.getMonto()- bolivianos)*100;
            System.out.println("Centavos = "+centavos);
            int cen = (int) centavos;
            String cent = cen+"/100";


            System.out.println(r.getIdRecibo());
            Date fr = r.getFecha();
            
            String fecha = fr.toString();
            String hora = new Hora().getHora();

            System.out.println("fecha... "+fr.toString());

            Map parametro = new HashMap();
            parametro.put("idRecibo", id);
            parametro.put("letras", letras);
            parametro.put("centavos", cent);
           
            JasperPrint jasperPrint = JasperFillManager.fillReport(master, parametro,conn);

//            JasperViewer visor=new JasperViewer(jasperPrint,false);
//            visor.setTitle("Geniz Reportes - GSF");
//            visor.setVisible(true);
            JasperPrintManager.printReport(jasperPrint, true);
            
        } catch (Exception e) {
            System.out.println("Mensaje de error:"+e.getCause() );
        }
    }

    public void ejecutarListaPagos(int idSucursal, Date fechaIni, Date fechaFin)
    {

         URL in = null;
        in = getClass().getResource("/Reportes/ListaPendienteXfecha.jasper");
        if(in == null){
            System.out.println("no se encuentra el archivo el archivo del maestro ListaPendienteXfecha.jasper");
            System.exit(2);
        }
        JasperReport master = null;
        try {

            TipoCambio tipoCambio = new ControlTipoCambio().dameCambio();

            master = (JasperReport)JRLoader.loadObject(in);
            Map parametro = new HashMap();
            System.out.println("Sucursal="+idSucursal+"fechaI+"+fechaIni+"fechaF="+fechaFin);
            parametro.put("idSucursal", idSucursal);
            parametro.put("fechaInicio", fechaIni);
            parametro.put("fechaFin", fechaFin);
            parametro.put("tipoCambio",tipoCambio.getTipoCompra());

            JasperPrint jasperPrint = JasperFillManager.fillReport(master, parametro,conn);

//            JasperViewer visor=new JasperViewer(jasperPrint,false);
//            visor.setTitle("Geniz Reportes - GSF");
//            visor.setVisible(true);
            JasperPrintManager.printReport(jasperPrint, true);
            


        } catch (Exception e) {
            System.out.println("Mensaje de error en Lista de pagos Pendientes:"+e.getMessage() );
        }
    }

    public void ejecutarListaPagosPagados(int idSucursal, Date fechaIni, Date fechaFin, int idUser)
    {
        URL in = null;
        if(idUser !=0)
            in = getClass().getResource("/Reportes/ListaInteresesPagados.jasper");
        else
            in = getClass().getResource("/Reportes/ListaInteresesPagadosId.jasper");
        if(in == null){
            System.out.println("No se encuentra el archivo el archivo del maestro ListaInteresesPagados.jasper");
            System.exit(2);
        }
        JasperReport master = null;
        try {

            TipoCambio tipoCambio = new ControlTipoCambio().dameCambio();

            master = (JasperReport)JRLoader.loadObject(in);
            Map parametro = new HashMap();
            System.out.println("Sucursal="+idSucursal+"fechaI+"+fechaIni+"fechaF="+fechaFin);
            parametro.put("idSucursal", idSucursal);
            parametro.put("fechaInicio", fechaIni);
            parametro.put("fechaFin", fechaFin);
            parametro.put("tipoCambio",tipoCambio.getTipoCompra());
            parametro.put("idUsuario",idUser);

            JasperPrint jasperPrint = JasperFillManager.fillReport(master, parametro,conn);

//            JasperViewer visor=new JasperViewer(jasperPrint,false);
//            visor.setTitle("Geniz Reportes - GSF");
//            visor.setVisible(true);
            JasperPrintManager.printReport(jasperPrint, true);



        } catch (Exception e) {
            System.out.println("Mensaje de error en Lista de pagos Pagados:"+e.getMessage() );
        }
    }

    public void ejecutarListaPagosXBanco(int idSucursal, Date fechaIni, Date fechaFin)
    {

         URL in = null;
        in = getClass().getResource("/Reportes/ListaPendienteXbanco.jasper");
        if(in == null){
            System.out.println("no se encuentra el archivo el archivo del maestro ListaPendienteXBanco.jasper");
            System.exit(2);
        }
        JasperReport master = null;
        try {

            TipoCambio tipoCambio = new ControlTipoCambio().dameCambio();

            master = (JasperReport)JRLoader.loadObject(in);
            Map parametro = new HashMap();
            System.out.println("Sucursal="+idSucursal+"fechaI+"+fechaIni+"fechaF="+fechaFin);
            parametro.put("idSucursal", idSucursal);
            parametro.put("fechaInicio", fechaIni);
            parametro.put("fechaFin", fechaFin);
            parametro.put("tipoCambio",tipoCambio.getTipoCompra());

            JasperPrint jasperPrint = JasperFillManager.fillReport(master, parametro,conn);

//            JasperViewer visor=new JasperViewer(jasperPrint,false);
//            visor.setTitle("Geniz Reportes - GSF");
//            visor.setVisible(true);
            JasperPrintManager.printReport(jasperPrint, true);



        } catch (Exception e) {
            System.out.println("Mensaje de error en Lista de pagos Pendientes por banco:"+e.getMessage() );
        }
    }

    public void cerrar()
    {
        try {
            conn.close();
        } catch (Exception e) {
            e.getCause();
        }
    }

    public void ejecutarRecibo(Recibo r, String detalle, Cuenta c)
    {
        URL in = null;
        in = getClass().getResource("/Reportes/recibo.jasper");
        if(in == null){
            System.out.println("no se encuentra el archivo el archivo del maestro Recibo.jasper");
            System.exit(2);
        }
        JasperReport master = null;
        try {
            master = (JasperReport)JRLoader.loadObject(in);            
            PlanInversion p = c.getPlan();            
            int bolivianos = (int) r.getMonto();
            double centavos = (r.getMonto()- bolivianos)*100;
            System.out.println("Centavos = "+centavos);
            int cen = (int) centavos;
            String cent = cen+"/100";
            String letras = new NumerosLetras().NumerosALetras(bolivianos);
            
            Sucursal s = new ControlSucursal().obtenerSucursal(r.getIdSucursal());
            Cliente cli = c.getCliente();

            Map parametro = new HashMap();
            parametro.put("idRecibo", r.getIdRecibo());
            parametro.put("letras", letras+" "+cent);
            parametro.put("numSucursal", "SUCURSAL-"+(s.getIdSucursal()-1));
            parametro.put("dirSucursal", s.getDireccionSuc());
            parametro.put("ubiSucursal", s.getUbicacionSuc()+"-"+s.getDpto()+"-BOLIVIA");
            parametro.put("total", Herramienta.redondearDoubleString(r.getMonto()));
            parametro.put("tipoCambio", Herramienta.redondearDoubleString(r.getTipoCambio()));
            parametro.put("cliente", cli.getNombreCompletoCliente());
            parametro.put("numCuenta", String.valueOf(c.getNumeroCuenta()));
            parametro.put("inversion", Herramienta.redondearDoubleString(c.getMonto()));
            parametro.put("plan", p.getNombrePlan()+"-"+p.getDuracion()+" Meses");
            parametro.put("fecha", r.getFecha());
            parametro.put("usuario", new ControlUsuario().getUsuarioId(r.getIdUsuario()).getNombreUsuario());
            parametro.put("detalle", detalle);

            JasperPrint jasperPrint = JasperFillManager.fillReport(master, parametro,conn);

//            JasperViewer visor=new JasperViewer(jasperPrint,false);
//            visor.setTitle("Geniz Reportes - GSF");
//            visor.setVisible(true);
            JasperPrintManager.printReport(jasperPrint, true);

        } catch (Exception e) {
            System.out.println("Mensaje de error al ejecutarRecibo:"+e.getCause() );
        }
    }

    public void ejecutarLibroVentas(int idSucursal, Calendar inicio, Calendar fin)
    {
        URL in = null;
        in = getClass().getResource("/Reportes/libroVentasFactura.jasper");
        if(in == null){
            System.out.println("no se encuentra el archivo Maestro libroVentasFactura");
            System.exit(2);
        }
        JasperReport master = null;
        try {
            master = (JasperReport)JRLoader.loadObject(in);            

            Map parametro = new HashMap();
            parametro.put("idSucursal", idSucursal);
            parametro.put("fechaIni",inicio.getTime() );
            parametro.put("fechaFin",fin.getTime());
            parametro.put("periodo",(inicio.get(Calendar.MONTH)+1)+"/"+inicio.get(Calendar.YEAR));

            JasperPrint jasperPrint = JasperFillManager.fillReport(master, parametro,conn);

//            JasperViewer visor=new JasperViewer(jasperPrint,false);
//            visor.setTitle("Libro Ventas Factura");
//            visor.setVisible(true);
            JasperPrintManager.printReport(jasperPrint, true);

        } catch (Exception e) {
            System.out.println("Mensaje de error en Libro de ventas Report:"+e.getCause() );
        }
    }

    public void ejecutarLibroCompras(int idSucursal, Calendar inicio, Calendar fin)
    {
        URL in = null;
        in = getClass().getResource("/Reportes/libroComprasIva.jasper");
        if(in == null){
            System.out.println("no se encuentra el archivo Maestro libroComprasIva");
            System.exit(2);
        }
        JasperReport master = null;
        try {
            master = (JasperReport)JRLoader.loadObject(in);

            Map parametro = new HashMap();
            parametro.put("idSucursal", idSucursal);
            parametro.put("fechaIni",inicio.getTime() );
            parametro.put("fechaFin",fin.getTime());
            parametro.put("periodo",(inicio.get(Calendar.MONTH)+1)+"/"+inicio.get(Calendar.YEAR));

            JasperPrint jasperPrint = JasperFillManager.fillReport(master, parametro,conn);

//            JasperViewer visor=new JasperViewer(jasperPrint,false);
//            visor.setTitle("Libro Compras Iva");
//            visor.setVisible(true);
            JasperPrintManager.printReport(jasperPrint, true);

        } catch (Exception e) {
            System.out.println("Mensaje de error en Libro de Compras Report:"+e.getCause() );
        }
    }

    public void ejecutarInversionesNuevas(int idSucursal, Date inicio, Date fin, int IdUsuario)
    {
        URL in = null;
        if(IdUsuario !=0)
            in = getClass().getResource("/Reportes/ListaInversionesNuevas.jasper");
        else
            in = getClass().getResource("/Reportes/ListaInversionesNuevasId.jasper");

        if (in == null) {
            System.out.println("no se encuentra el archivo Maestro listaInversionesNuevas");
            System.exit(2);
        }
        JasperReport master = null;
        try {
            master = (JasperReport)JRLoader.loadObject(in);

            System.out.println("inicio="+inicio+" Fin="+fin);
            System.out.println(idSucursal);
            Map parametro = new HashMap();
            parametro.put("idSucursal",idSucursal);
            parametro.put("fechaInicio",inicio);
            parametro.put("fechaFin",fin);
            parametro.put("id_usuario",IdUsuario);

            JasperPrint jasperPrint = JasperFillManager.fillReport(master, parametro,conn);
            
            JasperPrintManager.printReport(jasperPrint, true);

        } catch (Exception e) {
            System.out.println("Mensaje de error en Lista de Inversiones Nuevas Report:"+e.getCause() );
        }
    }

    public void ejecutarInversionesCerradas(int idSucursal, Date inicio, Date fin, int idUsuario)
    {
        URL in = null;
        if(idUsuario !=0)
            in = getClass().getResource("/Reportes/ListaInversionesCerradas.jasper");
        else
            in = getClass().getResource("/Reportes/ListaInversionesCerradasId.jasper");
        if(in == null){
            System.out.println("no se encuentra el archivo Maestro listaInversionesCerradas");
            System.exit(2);
        }
        JasperReport master = null;
        try {
            master = (JasperReport)JRLoader.loadObject(in);

            Map parametro = new HashMap();
            parametro.put("idSucursal", idSucursal);
            parametro.put("fechaInicio",inicio );
            parametro.put("fechaFin",fin);
            parametro.put("idUsuario",idUsuario);

            JasperPrint jasperPrint = JasperFillManager.fillReport(master, parametro,conn);

//            JasperViewer visor=new JasperViewer(jasperPrint,false);
//            visor.setTitle("Lista de inversiones cerradas y canceladas");
//            visor.setVisible(true);
            JasperPrintManager.printReport(jasperPrint, true);

        } catch (Exception e) {
            System.out.println("Mensaje de error en Lista de Inversiones CERRADAS Y CANCELADAS Report:"+e.getCause() );
        }
    }
    public void ejecutarInversionesPorCerrar(int idSucursal, Date inicio, Date fin)
    {
        URL in = null;
        in = getClass().getResource("/Reportes/ListaInversionesPorCerrar.jasper");
        if(in == null){
            System.out.println("no se encuentra el archivo Maestro listaInversionesPorCerrar");
            System.exit(2);
        }
        JasperReport master = null;
        try {
            master = (JasperReport)JRLoader.loadObject(in);

            Map parametro = new HashMap();
            parametro.put("idSucursal", idSucursal);
            parametro.put("fechaInicio",inicio );
            parametro.put("fechaFin",fin);

            JasperPrint jasperPrint = JasperFillManager.fillReport(master, parametro,conn);

//            JasperViewer visor=new JasperViewer(jasperPrint,false);
//            visor.setTitle("Lista de inversiones cerradas y canceladas");
//            visor.setVisible(true);
            JasperPrintManager.printReport(jasperPrint, true);

        } catch (Exception e) {
            System.out.println("Mensaje de error en Lista de Inversiones por CERRAR Report:"+e.getCause() );
        }
    }

     public void boletaPagos(int id)
    {

        URL in = null;
        in = getClass().getResource("/Reportes/reciboDePago.jasper");

        if(in == null){
            System.out.println("no se encuentra el archivo el archivo del maestro");
            System.exit(2);
        }
        JasperReport master = null;
        try {
            master = (JasperReport)JRLoader.loadObject(in);

            Map parametro = new HashMap();
            parametro.put("idSueldo", id);
            //parametro.put("fechaFin", fechaFin);


            //JasperReport master = JasperCompileManager.compileReport(archivo);
            //este es el parametro , se pueden agregar mas
            //basta con poner  mas parametro.put
            //Reporte diseÃ±ado y compilado con IReport


            JasperPrint jasperPrint = JasperFillManager.fillReport(master, parametro,conn);

           /*  JasperViewer jviewer= new JasperViewer(jasperPrint,false);
            jviewer.setTitle("Marco: Reporte");
            //jviewer.setAlwaysOnTop(true);
            jviewer.setVisible(true);
*/

            JasperPrintManager.printReport(jasperPrint, true);



        } catch (Exception e) {
            System.out.println("Mensaje de error lista sueldos:"+e.getMessage() );
        }
    }

     public void ejecutarListaSueldo(Date fechaIni, Date fechaFin)
    {

        URL in = null;
        in = getClass().getResource("/Reportes/listaSueldos.jasper");

        if(in == null){
            System.out.println("no se encuentra el archivo el archivo del maestro");
            System.exit(2);
        }
        JasperReport master = null;
        try {
            master = (JasperReport)JRLoader.loadObject(in);

            Map parametro = new HashMap();
            parametro.put("fechaIni", fechaIni);
            parametro.put("fechaFin", fechaFin);


            //JasperReport master = JasperCompileManager.compileReport(archivo);
            //este es el parametro , se pueden agregar mas
            //basta con poner  mas parametro.put
            //Reporte diseÃ±ado y compilado con IReport


            JasperPrint jasperPrint = JasperFillManager.fillReport(master, parametro,conn);

             JasperViewer jviewer= new JasperViewer(jasperPrint,false);
            jviewer.setTitle("Marco: Reporte");
            //jviewer.setAlwaysOnTop(true);
            jviewer.setVisible(true);


            //JasperPrintManager.printReport(jasperPrint, true);



        } catch (Exception e) {
            System.out.println("Mensaje de error lista sueldos:"+e.getMessage() );
        }
    }

}
